In a conventional enterprise, application development often occurs on a project-by-project basis. As a result, each project may use a different approach and thus it may be that effort and resources are unintentionally duplicated. Similarly, the resulting approaches for integration and maintenance are often different and not coordinated.
Such difficulties persist even when open standard platforms such as Java are employed. Despite the defined specifications inherent in such platforms, different application development groups employ different architectures, internal communication mechanisms, and so on. To provide a degree of service-oriented architecture (SOA), as is often desired, it becomes necessary to write significant code to adapt one application to another.